package mpiserver;

import java.io.IOException;
import repository.exception.NoRepositoryException;
import repository.exception.NullRootException;
import taskmanager.JTask;
import mpiserver.MpiListener;
import repository.exception.RepositoryException;

/**
 *
 * @author Алексей ID=2001
 */
public interface IMpiServer {
    /**
     * Проверка 
     * @return true - если лог-файл SMPD-сервера был 
     * обновлён из-за превышения заданной квоты.
     * false - если файл не обновлялся, и продолжает удовлетворять квоте
     */
//    public boolean checkSMPDLogFile() throws IOException;
    /**
     * Прочитать командные строки вызова скриптов
     * @return true в случае успеха, иначе false
     */
    public boolean config();

    /**
     * Начать сканирование состояния исполнения задач
     */
    public void startTaskScaning();

    /**
     * Завершить сканирования состояния исполнения задач
     */
    public void stopTaskScaning();

    /**
     * Остановить smpd
     * @throws java.io.IOException ошибка при вызове командной строки
     */
//    public boolean killSmpd() /*throws IOException*/;
    /**
     * Запустить smpd -printprocs
     * @return true - процесс запущен, false - ошибка при запуске
     * @throws java.io.IOException ошибка при вызове командной строки
     */
    public boolean startSmpd() /*throws IOException*/;

    /**
     * Проверка работы smpd
     * @return true - smpd запущен, иначе false
     * @throws java.io.IOException ошибка при вызове командной строки
     */
//    public boolean testSmpd() throws IOException;

    /**
     * Отправить задачу на выполнение в mpi
     * @param task задача
     * @param procsNum количество процессов
     * @return false - файла не существует
     * @throws mpiserver.MpiException ошибка при вызове командной строки
     * @throws repository.exception.RepositoryException ошибка репозитория
     */
    public void runMpi(JTask task/*, int procsNum*/)
            /*throws MpiException, RepositoryException*/;

    /**
     * Отправить задачу на компиляцию
     * @param task задача
     * @return false - файла исходников не существует
     * @throws java.io.IOException ошибка при вызове командной строки
     * @throws NoRepositoryException нет репозитория у пользователя
     * @throws NullRootException не задана директория репозитория
     */
    public void runGcc(JTask task)
            /*throws IOException,NoRepositoryException,NullRootException*/;

    /**
     * Запросить парсер с загруженными настройками
     * @return парсер с настройками
     */
    public Settings getSettings();

    /**
     * Установить настройки
     * @param iniReader парсер с загруженными настройками
     * @return true в случае успеха
     */
    public boolean setSettings(Settings iniReader);

    /**
     * Запросить путь до директории со скриптами
     * @return путь до директории со скриптами
     */
    public String getScriptsPath();

    /**
     * Установить путь до директории со скриптами
     * @param scriptsPath путь до директории со скриптами
     */
    public void setScriptsPath(String scriptsPath);

    /**
     * Запросить путь до настроичного файла
     * @return путь до настроичного файла
     */
    public String getSettingsPath ();

    /**
     * Установить путь до настроичного файла
     * @param settingsPath путь до настроичного файла
     */
    public void setSettingsPath(String settingsPath);

    /**
     * Добавить обработчик событий ведомого сервера
     * @param listener обработчик события
     */
    public void addMpiListener(MpiListener listener);

}
